Vim 文本对象:终极指导
要Text Objects在 Vim 有效地编辑,你不应当按字符编辑,而应当是按词、按句、按段。在 Vim 中,这三种高级上下文被称为 文本对象 (Text Objects)
。Vim 为纯文本和代码都提供了文本对象。你也可以在 Vim 脚本中定义新的文本对象。学习文本对象可以使你编辑的速度和精确度都得到提升
编辑命令的结构
在 Vim 中,编辑命令具有以下结构 :
<数字><命令><文本对象或 motion>
数字代表在多少个文本对象或 motion 上执行操作,例如删除三个词或两个段落。数字是可选的,而且可以出现在命令的后面
命令是一个操作。例如 Change, Delete, Copy。命令也是可选的,但是没它的时候你只是执行了 motion 来移动光标,而没有执行编辑操作
文本对象可以是一个文字结构,例如一个词或者一个段落。motion 可以是前进一行、后退一段、进入行尾
一个编辑命令是由一个命令加上一个文本对象或 motion,例如删除这个词、更改下一段、复制这一段。
译者注
实际上,可以接文本对象的命令一共有七个:cvdy⇒<
纯文本文本对象
Vim 为纯文本提供了三种文本对象: 词 (Words)
、句子和段落
词
aw - a word(包括周围的空格)
iw - inner word (不包含周围的空格)
Lorem ipsum dolor sit amet...
daw
Lorem dolor sit amet...
以 a 开头的文本对象包含周围的空格。motion w 也许被认为和文本对象 aw 相似,但是不同的是 dw 或删除词剩余部分,而 daw 或删除整个词,而不论光标在词的任何位置上
句子
as - a sentence
is - inner sentence
段落
ap - a paragraph
ip - inner paragraph
Motion 命令 vs. 文本对象命令
编程语言文本对象
Vim 基于公共编程结构提供了几种文本对象
字符串
a" - a 双引号括起的字符串
i" - inner 双引号括起的字符串
a' - a 单引号括起的字符串
i' - inner 单引号括起的字符串
a` - a 反引号括起的字符串
i` - inner 反引号括起的字符串
括号
-
-
a 圆括号括起的字符串
-
-
-
inner 圆括号括起的字符串
-
中括号
a] - a 中括号括起的字符串
i] - inner 中括号括起的字符串
大括号
a} - a 大括号括起的字符串
i} - inner 大括号括起的字符串
标记语言标签
at - a 标签括起的字符串
it - inner 标签括起的字符串
Vim 脚本提供的额外文本对象
CamelCaseMotion 提供的文本对象可供在驼峰命名的单词中进行移动
VimTextObj 提供的文本对象可用于函数参数
Indent Object 基于缩进提供了文本对象
Ruby Block 提供了基于 Ruby block 的文本对象